classes = {'CORE': [('ui.UILists', [('GroupPosesUIList', '')]),
                    ('properties', [('HistoryObjectsCollection', ''),
                                    ('HistoryUnmirroredCollection', ''),
                                    ('HistoryEpochCollection', ''),
                                    ('GroupPoseCollection', ''),
                                    ('M4SceneProperties', ''),
                                    ('Mirror_Settings', ''),
                                    ('SimpleDeformGizmoObjectPropertyGroup', ''),
                                    ('ModifierProper', ''),
                                    ('M4ObjectProperties', '')]),
                    ('preferences', [('MACHIN4toolsPreferences', ''),
                                     ]),
                    ('ui.operators.call_pie', [('CallM4A1toolsPie', 'call_m4a1tools_pie')]),
                    ('ui.operators.draw', [('DrawLabel', 'draw_label')]),

                    ('ui.operators.help', [('GetSupport', 'get_m4a1tools_support')]),
                    ('ui.operators.update', [('RemoveUpdate', 'remove_m4a1tools_update'),
                                             ('UseFoundUpdate', 'use_m4a1tools_update'),
                                             ('ReScanUpdates', 'rescan_m4a1tools_updates')]),

                    ('ui.panels', [('PanelM4A1tools', 'm4a1_tools')]),
                    ('ui.menus', [('MenuM4A1toolsObjectContextMenu', 'm4a1tools_object_context_menu'),
                                  ('MenuM4A1toolsMeshContextMenu', 'm4a1tools_mesh_context_menu'),
                                  ('MenuGroupObjectContextMenu', 'group_object_context_menu')]),
                    ('ui.gizmos', [('GizmoGroupGroupTransform', 'group_transform')]),
                    ('operators.quadsphere', [('QuadSphere', 'quadsphere')])],

           'SMART_VERT': [('operators.smart_vert', [('SmartVert', 'smart_vert')])],
           'SMART_EDGE': [('operators.smart_edge', [('SmartEdge', 'smart_edge')])],
           'SMART_FACE': [('operators.smart_face', [('SmartFace', 'smart_face')])],
           'CLEAN_UP': [('operators.clean_up', [('CleanUp', 'clean_up')])],
           'SIMPLE_DEFORM_HELPER': [
               ('operators.simple_deform_helper',
                [('DeformAxisOperator', 'simple_deform_gizmo_axis')]),
               ('ui.npanels.simple_deform_helper',
                [('SimpleDeformHelperToolPanel', 'simple_deform_helper')]),
           ],
           'LATTICE_HELPER': [
               ('operators.lattice_helper', [
                   ('Lattice_Operator', 'lattice_operator'),
                   ('Apply_Lattice_Operator', 'apply_lattice_operator'),
               ]),
               ('ui.npanels.lattice_helper', [('LATTICE_H_MT_Menus', 'MT_latticehelper')]), ],
           # 'WAVE_MODIFIER': [('ui.npanels.wave_modifier', [
           #     ('WaveSet', 'wave_set_modifier'),
           #     ('WaveAnimation', 'wave_animation'),
           # ])],
           # 'MESHDEFORM_HELPER': [('operators.meshdeform_helper', [
           #     ('Apply_Meshdeform', 'apply_meshdeform'),
           #     ('Bind_Meshdeform', 'bind_meshdeform'),
           #     ('Convex_Meshdeform', 'convex_meshdeform'),
           # ]),
           #                        ],
           'MIRROR_VG': [('operators.mirror_vg', [
               ('Vg_clear_unused', 'vg_clear_unused'),
               ('Vg_remove_zero', 'vg_remove_zero'),
               ('Vg_mirror_weight', 'vg_mirror_weight')
           ])],

           'CLIPPING_TOGGLE': [('operators.clipping_toggle', [('ClippingToggle', 'clipping_toggle')])],
           'FOCUS': [('operators.focus', [('Focus', 'focus')])],
           'MIRROR': [('operators.mirror', [('Mirror', 'mirror'),
                                            ('Unmirror', 'unmirror')])],
           'ALIGN': [('operators.align', [('Align', 'align'),
                                          ('AlignRelative', 'align_relative')])],
           'CONTROL_MOVE': [('operators.control', [('MoveOperator', 'control_move')])],            


           'APPLY': [('operators.apply', [('Apply', 'apply_transformations')])],
           'SELECT': [('operators.select', [('SelectCenterObjects', 'select_center_objects'),
                                            ('SelectWireObjects', 'select_wire_objects'),
                                            ('SelectHierarchy', 'select_hierarchy')])],
           'MESH_CUT': [('operators.mesh_cut', [('MeshCut', 'mesh_cut')])],
           'SURFACE_SLIDE': [('operators.surface_slide', [('SurfaceSlide', 'surface_slide'),
                                                          ('FinishSurfaceSlide', 'finish_surface_slide')])],
           'ASSETBROWSER': [('operators.assetbrowser', [('AssembleInstanceCollection', 'assemble_instance_collection'),
                                                        ('CreateAssemblyAsset', 'create_assembly_asset'),
                                                        ('AssetBrowserBookmark', 'assetbrowser_bookmark')])],
           'FILEBROWSER': [('operators.filebrowser', [('Open', 'filebrowser_open'),
                                                      ('Toggle', 'filebrowser_toggle'),
                                                      ('CycleThumbs', 'filebrowser_cycle_thumbnail_size')])],
           'SMART_DRIVE': [('operators.smart_drive', [('SmartDrive', 'smart_drive'),
                                                      ('SwitchValues', 'switch_driver_values'),
                                                      ('SetValue', 'set_driver_value')])],
           'UNITY': [('operators.unity', [('PrepareExport', 'prepare_unity_export'),
                                          ('RestoreExport', 'restore_unity_export')])],
           'MATERIAL_PICKER': [('operators.material_picker', [('MaterialPicker', 'material_picker')])],

           'GROUP': [('operators.group', [('Group', 'group'),
                                          ('UnGroup', 'ungroup'),
                                          ('Groupify', 'groupify'),
                                          ('Add', 'add_to_group'),
                                          ('Remove', 'remove_from_group'),
                                          ('Select', 'select_group'),
                                          ('Duplicate', 'duplicate_group'),
                                          ('ToggleGroupMode', 'toggle_outliner_group_mode'),
                                          ('ToggleChildren', 'toggle_outliner_children'),
                                          ('ExpandOutliner', 'expand_outliner'),
                                          ('CollapseOutliner', 'collapse_outliner'),
                                          ('TransformGroup', 'transform_group'),

                                          ('BakeGroupGizmoSize', 'bake_group_gizmo_size'),
                                          ('SetupGroupGizmos', 'setup_group_gizmos'),

                                          ('SetGroupPose', 'set_group_pose'),
                                          ('UpdateGroupPose', 'update_group_pose'),
                                          ('RemoveGroupPose', 'remove_group_pose'),
                                          ('RetrieveGroupPose', 'retrieve_group_pose'),
                                          ('SortGroupPose', 'sort_group_pose')]),
                     ('operators.draw.group', [('DrawGroupRestPose', 'draw_group_rest_pose')])],

           'REGION': [('operators.region', [('ToggleVIEW3DRegion', 'toggle_view3d_region'),
                                            ('ToggleASSETBROWSERRegion', 'toggle_asset_browser_region'),
                                            ('ToggleSIDEBar', 'toggle_side_bar'),
                                            ('AreaDumper', 'area_dumper')])],
           'SMOOTH': [('operators.smooth', [('ToggleSmooth', 'toggle_smooth')])],
           'THREAD': [('operators.thread', [('Thread', 'add_thread')])],
           'EDGE_CONSTRAINT': [
               ('operators.edge_constraint', [('TransformEdgeConstrained', 'transform_edge_constrained')])],
           'EXTRUDE': [('operators.extrude', [('PunchIt', 'punch_it'),
                                              ('CursorSpin', 'cursor_spin')])],
           'RENDER': [('operators.render', [('Render', 'render'),
                                            ('DuplicateNodes', 'duplicate_nodes')])],

           'CUSTOMIZE': [('operators.customize', [('Customize', 'customize'),
                                                  ('RestoreKeymaps', 'restore_keymaps')])],

           'MODES_PIE': [('ui.pies', [('PieModes', 'modes_pie')]),
                         ('ui.operators.mode', [('EditMode', 'edit_mode'),
                                                ('MeshMode', 'mesh_mode'),
                                                ('ImageMode', 'image_mode'),
                                                ('UVMode', 'uv_mode'),
                                                ('SurfaceDrawMode', 'surface_draw_mode')]),
                         ('ui.operators.grease_pencil', [('ShrinkwrapGreasePencil', 'shrinkwrap_grease_pencil')]),

                         ('ui.operators.open_blend', [('OpenLibraryBlend', 'open_library_blend')])],
           'SAVE_PIE': [('ui.pies', [('PieSave', 'save_pie')]),
                        ('ui.operators.save', [('New', 'new'),
                                               ('Save', 'save'),
                                               ('SaveAs', 'save_as'),
                                               ('SaveIncremental', 'save_incremental'),
                                               ('SaveVersionedStartupFile', 'save_versioned_startup_file'),
                                               ('LoadMostRecent', 'load_most_recent'),
                                               ('LoadPrevious', 'load_previous'),
                                               ('LoadNext', 'load_next')]),
                        ('ui.operators.save', [('OpenTemp', 'open_temp_dir'),
                                               ('Purge', 'purge_orphans'),
                                               ('Clean', 'clean_out_blend_file'),
                                               ('ReloadLinkedLibraries', 'reload_linked_libraries'),
                                               ('ScreenCast', 'screen_cast')])],
           'SHADING_PIE': [('ui.pies', [('PieShading', 'shading_pie')]),
                           ('ui.operators.shading', [('SwitchShading', 'switch_shading'),
                                                     ('ToggleOutline', 'toggle_outline'),
                                                     ('ToggleCavity', 'toggle_cavity'),
                                                     ('ToggleCurvature', 'toggle_curvature'),
                                                     ('MatcapSwitch', 'matcap_switch'),
                                                     ('RotateStudioLight', 'rotate_studiolight'),
                                                     ('AddWorld', 'add_world'),
                                                     ('AdjustBevelShaderRadius', 'adjust_bevel_shader_radius')]),
                           ('ui.operators.shade', [('Shade', 'shade'),
                                                   ('ToggleAutoSmooth', 'toggle_auto_smooth')]),
                           ('ui.operators.overlay', [('ToggleGrid', 'toggle_grid'),
                                                     ('ToggleWireframe', 'toggle_wireframe')]),
                           ('ui.operators.colorize', [('ColorizeMaterials', 'colorize_materials'),
                                                      ('ColorizeObjectsFromActive', 'colorize_objects_from_active'),
                                                      ('ColorizeObjectsFromCollections',
                                                       'colorize_objects_from_collections'),
                                                      ('ColorizeObjectsFromGroups', 'colorize_objects_from_groups'),
                                                      ('ColorizeObjectsFromMaterials',
                                                       'colorize_objects_from_materials')])],
           'VIEWS_PIE': [('ui.pies', [('PieViewport', 'viewport_pie')]),
                         ('ui.operators.viewport', [('ViewAxis', 'view_axis'),
                                                    ('MakeCamActive', 'make_cam_active'),
                                                    ('SmartViewCam', 'smart_view_cam'),
                                                    ('NextCam', 'next_cam'),
                                                    ('ToggleCamPerspOrtho', 'toggle_cam_persportho'),
                                                    ('ToggleViewPerspOrtho', 'toggle_view_persportho'),
                                                    ('ToggleOrbitMethod', 'toggle_orbit_method'),
                                                    ('ToggleOrbitSelection', 'toggle_orbit_selection'),
                                                    ('ResetViewport', 'reset_viewport')])],
           'ALIGN_PIE': [('ui.pies', [('PieAlign', 'align_pie'),
                                      ('PieUVAlign', 'uv_align_pie')]),
                         ('ui.operators.align', [('AlignEditMesh', 'align_editmesh'),
                                                 ('CenterEditMesh', 'center_editmesh'),
                                                 ('AlignObjectToEdge', 'align_object_to_edge'),
                                                 ('AlignObjectToVert', 'align_object_to_vert'),
                                                 ('Straighten', 'straighten')]),
                         ('ui.operators.uv', [('AlignUV', 'align_uv')])],
           'ALIGN_HELPER_PIE': [('ui.pies', [('AlignHelperPieMenu', 'pie_popoti_align_helper'),]),
                                    ('ui.operators.align_helper', [('AlignObject', 'tool_kits_fast_align')]),],




           'CURSOR_PIE': [('ui.pies', [('PieCursor', 'cursor_pie')]),
                          ('ui.operators.cursor', [('CursorToOrigin', 'cursor_to_origin'),
                                                   ('CursorToSelected', 'cursor_to_selected'),
                                                   ('SelectedToCursor', 'selected_to_cursor')]),
                          ('ui.operators.origin', [('OriginToActive', 'origin_to_active'),
                                                   ('OriginToCursor', 'origin_to_cursor'),
                                                   ('OriginToBottomBounds', 'origin_to_bottom_bounds')])],
           'TRANSFORM_PIE': [('ui.pies', [('PieTransform', 'transform_pie')]),
                             ('ui.operators.transform_preset', [('SetTransformPreset', 'set_transform_preset')])],
           'SNAPPING_PIE': [('ui.pies', [('PieSnapping', 'snapping_pie')]),
                            ('ui.operators.snapping_preset', [('SetSnappingPreset', 'set_snapping_preset')])],
           'COLLECTIONS_PIE': [('ui.pies', [('PieCollections', 'collections_pie')]),
                               ('ui.operators.collection', [('CreateCollection', 'create_collection'),
                                                            ('RemoveFromCollection', 'remove_from_collection'),
                                                            ('Purge', 'purge_collections'),
                                                            ('Select', 'select_collection')])],
           'WORKSPACE_PIE': [('ui.pies', [('PieWorkspace', 'workspace_pie')]),
                             ('ui.operators.workspace', [('SwitchWorkspace', 'switch_workspace'),
                                                         ('GetIconNameHelp', 'get_icon_name_help')])],
           'TOOLS_PIE': [('ui.pies', [('PieTools', 'tools_pie')]),
                         ('ui.operators.tool', [('SetToolByName', 'set_tool_by_name'),
                                                ('SetBCPreset', 'set_boxcutter_preset')])],
           }

keys = {
    'CONTROL_MOVE': [
    {'label': 'Upward movement', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'UP_ARROW', 'value': 'PRESS', 'ctrl': True, 'alt': True,},
    {'label': 'Downward movement', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'DOWN_ARROW', 'value': 'PRESS', 'ctrl': True, 'alt': True, },
    {'label': 'Left movement', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'LEFT_ARROW', 'value': 'PRESS', 'ctrl': True, 'alt': True, },
    {'label': 'Right movement', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'RIGHT_ARROW', 'value': 'PRESS', 'ctrl': True, 'alt': True, },
    {'label': 'Move towards the view', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'NUMPAD_PLUS', 'value': 'PRESS', 'ctrl': True, 'alt': True, },
    {'label': 'Move away from the view', 'keymap': 'Object Mode', 'idname': 'm4a1.control_move', 'type': 'NUMPAD_MINUS', 'value': 'PRESS', 'ctrl': True, 'alt': True, }
    ],
    'SMART_VERT': [
    {'label': 'Merge Last', 'keymap': 'Mesh', 'idname': 'm4a1.smart_vert', 'type': 'ONE', 'value': 'PRESS',
     'ctrl': True,'properties': [('mode', 'MERGE'), ('mergetype', 'LAST'), ('slideoverride', False)]},
    {'label': 'Merge Center', 'keymap': 'Mesh', 'idname': 'm4a1.smart_vert', 'type': 'ONE', 'value': 'PRESS',
     'shift': True, 'properties': [('mode', 'MERGE'), ('mergetype', 'CENTER'), ('slideoverride', False)]},
    {'label': 'Merge Paths', 'keymap': 'Mesh', 'idname': 'm4a1.smart_vert', 'type': 'ONE', 'value': 'PRESS',
     'alt': True, 'properties': [('mode', 'MERGE'), ('mergetype', 'PATHS'), ('slideoverride', False)]},
    {'label': 'Connect Paths', 'keymap': 'Mesh', 'idname': 'm4a1.smart_vert', 'type': 'ONE', 'value': 'PRESS',
     'alt': True, 'ctrl': True, 'properties': [('mode', 'CONNECT'), ('slideoverride', False)]},
    {'label': 'Slide Extend', 'keymap': 'Mesh', 'idname': 'm4a1.smart_vert', 'type': 'ONE', 'value': 'PRESS',
     'shift': True, 'alt': True, 'properties': [('slideoverride', True)]}],
    'SMART_EDGE': [
        {'label': 'Smart Edge', 'keymap': 'Mesh', 'idname': 'm4a1.smart_edge', 'type': 'TWO', 'value': 'PRESS',
         'ctrl': True,'properties': [('sharp', False), ('offset', False)]},
        {'label': 'Toggle Sharp/Weight', 'keymap': 'Mesh', 'idname': 'm4a1.smart_edge', 'type': 'TWO',
         'shift': True, 'value': 'PRESS', 'properties': [('sharp', True), ('offset', False)]},
        {'label': 'Offset Edges', 'keymap': 'Mesh', 'idname': 'm4a1.smart_edge', 'type': 'TWO', 'alt': True,
         'value': 'PRESS', 'properties': [('sharp', False), ('offset', True)]}],
    'SMART_FACE': [{'keymap': 'Mesh', 'idname': 'm4a1.smart_face', 'type': 'THREE', 'value': 'PRESS','ctrl': True,}],
    'CLEAN_UP': [{'keymap': 'Mesh', 'idname': 'm4a1.clean_up', 'type': 'FOUR', 'value': 'PRESS','ctrl': True,}],
    'CLIPPING_TOGGLE': [{'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'm4a1.clipping_toggle',
                         'type': 'BUTTON5MOUSE', 'value': 'PRESS'}],
    'FOCUS': [
        {'label': 'View Selected', 'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'm4a1.focus',
         'type': 'F', 'value': 'PRESS', 'properties': [('method', 'VIEW_SELECTED')]},
        {'label': 'Local View', 'keymap': 'Object Mode', 'idname': 'm4a1.focus', 'type': 'F', 'value': 'PRESS',
         'ctrl': True, 'properties': [('method', 'LOCAL_VIEW'), ('invert', False)]},
        {'label': 'Local View (Inverted)', 'keymap': 'Object Mode', 'idname': 'm4a1.focus', 'type': 'F',
         'value': 'PRESS', 'ctrl': True, 'alt': True, 'properties': [('method', 'LOCAL_VIEW'), ('invert', True)]}],

    'MIRROR': [{'label': 'Flick Mirror', 'keymap': 'Object Mode', 'idname': 'm4a1.mirror', 'type': 'X',
                'value': 'PRESS', 'alt': True, 'shift': True, 'properties': [('flick', True), ('remove', False)]}],

    'ALIGN': [
        {'label': 'Object Mode', 'keymap': 'Object Mode', 'idname': 'm4a1.align', 'type': 'A', 'value': 'PRESS',
         'alt': True,'ctrl':True},
        {'label': 'Pose Mode', 'keymap': 'Pose', 'idname': 'm4a1.align', 'type': 'A', 'value': 'PRESS',
         'alt': True,'ctrl':True}],

    'FILEBROWSER': [
        # {'label': 'Open Filebrowser', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
        #              'idname': 'm4a1.filebrowser_open', 'type': 'O', 'value': 'PRESS',
        #              'properties': [('blend_file', False)]},
        #             {'label': 'Open .blend File', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
        #              'idname': 'm4a1.filebrowser_open', 'type': 'O', 'value': 'PRESS', 'alt': True,
        #              'properties': [('blend_file', True)]},
                    {'label': 'Toggle Sorting', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                     'idname': 'm4a1.filebrowser_toggle', 'type': 'ONE', 'value': 'PRESS',
                     'properties': [('type', 'SORT')]},
                    {'label': 'Toggle Display', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                     'idname': 'm4a1.filebrowser_toggle', 'type': 'TWO', 'value': 'PRESS',
                     'properties': [('type', 'DISPLAY_TYPE')]},
                    {'label': 'Cycle Thumbs Forwards', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                     'idname': 'm4a1.filebrowser_cycle_thumbnail_size', 'type': 'THREE', 'value': 'PRESS',
                     'properties': [('reverse', False)]},
                    {'label': 'Cycle Thumbs Backwards', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                     'idname': 'm4a1.filebrowser_cycle_thumbnail_size', 'type': 'THREE', 'value': 'PRESS',
                     'shift': True, 'properties': [('reverse', True)]},
                    {'label': 'Toggle Hidden', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                     'idname': 'm4a1.filebrowser_toggle', 'type': 'FOUR', 'value': 'PRESS',
                     'properties': [('type', 'HIDDEN')]}],

    'ASSETBROWSER': [{'label': 'Bookmark 1', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'ONE', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 1)]},
                     {'label': 'Bookmark 2', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'TWO', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 2)]},
                     {'label': 'Bookmark 3', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'THREE', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 3)]},
                     {'label': 'Bookmark 4', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'FOUR', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 4)]},
                     {'label': 'Bookmark 5', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'FIVE', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 5)]},
                     {'label': 'Bookmark 6', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'SIX', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 6)]},
                     {'label': 'Bookmark 7', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'SEVEN', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 7)]},
                     {'label': 'Bookmark 8', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'EIGHT', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 8)]},
                     {'label': 'Bookmark 9', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'NINE', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 9)]},
                     {'label': 'Bookmark 0', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                      'idname': 'm4a1.assetbrowser_bookmark', 'type': 'ZERO', 'value': 'PRESS', 'alt': True,
                      'properties': [('index', 10)]}],

    'GROUP': [
        {'label': 'Create Group', 'keymap': 'Object Mode', 'idname': 'm4a1.group', 'type': 'G', 'value': 'PRESS',
         'ctrl': True},
        {"label": "Select Group", "keymap": "Object Mode", "idname": "m4a1.select_group", "type": "LEFTMOUSE",
         "value": "DOUBLE_CLICK", 'shift': True},
        {'label': 'Toggle Group Mode', 'keymap': 'Outliner', 'space_type': 'OUTLINER',
         'idname': 'm4a1.toggle_outliner_group_mode', 'type': 'ONE', 'value': 'PRESS'},
        {'label': 'Expand Outliner', 'keymap': 'Outliner', 'space_type': 'OUTLINER',
         'idname': 'm4a1.expand_outliner', 'type': 'TWO', 'value': 'PRESS'},
        {'label': 'Collapse Outliner', 'keymap': 'Outliner', 'space_type': 'OUTLINER',
         'idname': 'm4a1.collapse_outliner', 'type': 'THREE', 'value': 'PRESS'},
        {'label': 'Toggle Children', 'keymap': 'Outliner', 'space_type': 'OUTLINER',
         'idname': 'm4a1.toggle_outliner_children', 'type': 'FOUR', 'value': 'PRESS'}],

    'SELECT': [{'label': 'Select Children', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'DOWN_ARROW', 'value': 'PRESS',
                'properties': [('direction', 'DOWN'), ('include_selection', False), ('unhide', False)]},
               {'label': 'Select Children (incl.)', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'DOWN_ARROW', 'value': 'PRESS', 'shift': True,
                'properties': [('direction', 'DOWN'), ('include_selection', True), ('unhide', False)]},
               {'label': 'Select Children (unhide)', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'DOWN_ARROW', 'value': 'PRESS', 'ctrl': True,
                'properties': [('direction', 'DOWN'), ('include_selection', False), ('unhide', True)]},
               {'label': 'Select Children (incl. + unhide)', 'keymap': 'Object Mode',
                'idname': 'm4a1.select_hierarchy', 'type': 'DOWN_ARROW', 'value': 'PRESS', 'shift': True,
                'ctrl': True, 'properties': [('direction', 'DOWN'), ('include_selection', True), ('unhide', True)]},

               {'label': 'Select Parents', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'UP_ARROW', 'value': 'PRESS', 'shift': False, 'ctrl': False,
                'properties': [('direction', 'UP'), ('include_selection', False), ('unhide', False)]},
               {'label': 'Select Parents (incl.)', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'UP_ARROW', 'value': 'PRESS', 'shift': True, 'ctrl': False,
                'properties': [('direction', 'UP'), ('include_selection', True), ('unhide', False)]},
               {'label': 'Select Parents (unhide)', 'keymap': 'Object Mode', 'idname': 'm4a1.select_hierarchy',
                'type': 'UP_ARROW', 'value': 'PRESS', 'shift': False, 'ctrl': True,
                'properties': [('direction', 'UP'), ('include_selection', False), ('unhide', True)]},
               {'label': 'Select Parents (incl. + unhide)', 'keymap': 'Object Mode',
                'idname': 'm4a1.select_hierarchy', 'type': 'UP_ARROW', 'value': 'PRESS', 'shift': True,
                'ctrl': True, 'properties': [('direction', 'UP'), ('include_selection', True), ('unhide', True)]}],

    'REGION': [{'label': '3D View', 'keymap': '3D View Generic', 'space_type': 'VIEW_3D',
                'idname': 'm4a1.toggle_view3d_region', 'type': 'T', 'value': 'PRESS'},
               {'label': 'Asset Browser', 'keymap': 'File Browser', 'space_type': 'FILE_BROWSER',
                'idname': 'm4a1.toggle_asset_browser_region', 'type': 'T', 'value': 'PRESS'},
               {'label': 'UV Editor', 'keymap': 'Image Generic', 'space_type': 'IMAGE_EDITOR',
                'idname': 'm4a1.toggle_side_bar', 'type': 'T', 'value': 'PRESS'},
               {'label': 'Node Editor', 'keymap': 'Node Generic', 'space_type': 'NODE_EDITOR',
                'idname': 'm4a1.toggle_side_bar', 'type': 'T', 'value': 'PRESS'}],

    'SMOOTH': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'm4a1.toggle_smooth', 'type': 'TAB',
         'value': 'PRESS', 'alt': True, 'info': ['Remap this is if Alt + Tab switches Windows for you']}],
    'EDGE_CONSTRAINT': [
        {'keymap': 'Mesh', 'idname': 'm4a1.transform_edge_constrained', 'type': 'R', 'value': 'PRESS',
         'alt': True, 'properties': [('transform_mode', 'ROTATE'), ('objmode', False)]}],
    'RENDER': [
        {'keymap': 'Node Editor', 'space_type': 'NODE_EDITOR', 'idname': 'm4a1.duplicate_nodes', 'type': 'D',
         'value': 'PRESS', 'shift': True}],

    'MODES_PIE': [{'label': '3D View', 'keymap': 'Object Non-modal', 'idname': 'wm.call_menu_pie', 'type': 'TAB',
                   'value': 'PRESS', 'properties': [('name', 'M4A1_MT_modes_pie')]},
                  {'label': 'Image Editor', 'keymap': 'Image', 'space_type': 'IMAGE_EDITOR',
                   'idname': 'wm.call_menu_pie', 'type': 'TAB', 'value': 'PRESS',
                   'properties': [('name', 'M4A1_MT_modes_pie')]}],
    'SAVE_PIE': [{'keymap': 'Window', 'idname': 'wm.call_menu_pie', 'type': 'S', 'value': 'PRESS', 'ctrl': True,
                  'properties': [('name', 'M4A1_MT_save_pie')]},
                 {'keymap': 'Window', 'idname': 'm4a1.save_versioned_startup_file', 'type': 'U',
                  'value': 'PRESS', 'ctrl': True, 'active': False}],
    'SHADING_PIE': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'm4a1.call_m4a1tools_pie',
         'type': 'PAGE_UP', 'value': 'PRESS', 'properties': [('idname', 'shading_pie')]}],
    'VIEWS_PIE': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'wm.call_menu_pie', 'type': 'PAGE_DOWN',
         'value': 'PRESS', 'properties': [('name', 'M4A1_MT_viewport_pie')]}],
    'ALIGN_PIE': [
        {'label': 'Edit Mode', 'keymap': 'Mesh', 'idname': 'wm.call_menu_pie', 'type': 'A', 'value': 'PRESS',
         'alt': True, 'properties': [('name', 'M4A1_MT_align_pie')]},
        {'label': 'UV Editor', 'keymap': 'UV Editor', 'idname': 'wm.call_menu_pie', 'type': 'A', 'value': 'PRESS',
         'alt': True, 'properties': [('name', 'M4A1_MT_uv_align_pie')]}],
    'ALIGN_HELPER_PIE': [
        {'label': 'Object Mode', 'keymap': 'Object Mode', 'idname': 'wm.call_menu_pie', 'type': 'A', 'value': 'PRESS',
         'alt': True,'properties': [('name', 'M4A1_MT_pie_popoti_align_helper')]}],

    'CURSOR_PIE': [{'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'wm.call_menu_pie', 'type': 'S',
                    'value': 'PRESS', 'shift': True, 'properties': [('name', 'M4A1_MT_cursor_pie')]}],
    'TRANSFORM_PIE': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'wm.call_menu_pie', 'type': 'BUTTON4MOUSE',
         'value': 'PRESS', 'shift': True, 'properties': [('name', 'M4A1_MT_transform_pie')]}],
    'SNAPPING_PIE': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'wm.call_menu_pie', 'type': 'BUTTON5MOUSE',
         'value': 'PRESS', 'shift': True, 'properties': [('name', 'M4A1_MT_snapping_pie')]}],
    'COLLECTIONS_PIE': [
        {'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'wm.call_menu_pie', 'type': 'C',
         'value': 'PRESS', 'shift': True, 'properties': [('name', 'M4A1_MT_collections_pie')]}],
    'WORKSPACE_PIE': [{'keymap': 'Window', 'idname': 'wm.call_menu_pie', 'type': 'F12', 'value': 'PRESS',
                       'properties': [('name', 'M4A1_MT_workspace_pie')]}],
    'TOOLS_PIE': [{'keymap': '3D View Generic', 'space_type': 'VIEW_3D', 'idname': 'm4a1.call_m4a1tools_pie',
                   'type': 'Q', 'value': 'PRESS', 'properties': [('idname', 'tools_pie')]}],
}
